'tite page sur Linux

Cette page contient des commandes, infos et conseils pouvant servir d'aide-mémoire ou de base pour se lancer dans Linux.

notes :

cet "article" est fortement inspiré de pas mal de docs trouvés sur l'Internet et sur papier, dont notamment The Hackademy HS n°2

Il est bien possible que cette page comportent des fautes (d'orthographe) et/ou des erreurs. Aussi faites attention avant de suivre les manips ci-dessous, et n'hésitez pas à me faire par de mes (éventuelles) bourdes :].

Avantages de Linux :

Inconvéniants majeurs :

Dans tous les cas je le conseille à tous les (futurs) informaticiens et tous ceux qui sont curieux et avides de nouveauté !
Surtout que "de nos jours" certaines disributions comme Redhat ou Mandrake sont aussi faciles à installer que votre (ex :)) OS préféré.

Je vais vous faire ici une brève description du savoir "de base" à connaitre. Il me sert d'ailleurs d'aide-mémoire aussi quand j'oublies les commandes :).

Structure de l'arborescence :

J'ai mis entre paranthèses l'équivalent (à peu près) des répertoires sur un système Windows, juste pour vous faire une vague idée de ce qu'il représentent.
Vous noterez que Linux utilise la mémoire virtuelle sur une partition spéciale appelée swap et non un fichier (C:\BOOTFILE.SYS) ce qui permet de ne pas fragmenter votre partition principale (bien que ca ne joue plus tant que ça, de nos jours).

Les chemins ou "path" :



Un path est un chemin d'accès à un fichier à travers l'arborescence de votre dur.
La variable d'environnement prend le même nom que sous Windows puisqu'elle se nomme PATH (on peut la consulter dans le fichier /etc/profile). Elle contient les chemins ou, lorsque vous taperez le nom d'une commande, le système ira vérifier si ceux si ne contiennent pas ladite commande. Cela vous permet de lancer directement les commande sans préciser l'arborescence pour y accèder.
D'ailleurs à propos de chemin, il y a 2 façons de l'écrire :
  • chemin absolu : vous écriver l'arborescence à partir de la racine (/urs/bin/machin)
  • chemin relatif : vous décriver le chemin à partir du répertoire courant
    explication : admettons que vous êtes dans /usr, vous n'avez qu'à préciser bin/machin ou ./bin/machin pour acceder à machin Le "." devant le slash indique de partir du répertoire courant (/usr) Un ".." devant un slash indiquerais de partir du répertoire père du répertoire courant (ici ca donnerait ../usr/bin/machin mais ca n'aurait pas d'intérêt ;))

    La notion d'utilisateur



    Les groupes d'utilisateurs présents sur le système sont définis dans le fichier /etc/group. Chaque utilisateur fait parti d'un rgoupe ayant un identifiant unique nommé GID (Groupe IDentification).

    Chaque "propriétés" utilisateur sont défines dans le fichier /etc/passwd
    exemple de synthaxe de ce fichier (nb : on remarquera que, comme dans le fichier /etc/group, les informations sont séparées sur une même ligne par des ":") :
    popo:x:1000:1000:Knoppix User:/home/popo:/bin/bash
    popo : c'est le nom d'utilisateur ou login de la personne
    x : c'est le password crypté de son compte. Ici on utilise les "shadow password" càd que les passwd des utilisateur sont en fait situé dans le fichier /etc/shadow, lisible uniquement par le root.
    1000 : c'est l'UID (User IDentifiant) de l'utilisateur sur le système
    1000 : c'est le GID du groupe auquel appartient cet utilisateur
    Knoppix user : Nom réel de l'utilisateur (ici c'est le nom par défaut mis par la distribution Knoppix sous laquelle je tourne en ce moment :])
    /home/knoppix : contient le chemin de mon répertoire personnel (ma "homedir" pour les intimes)
    /bin/bash : c'est mon shell (interpréteur de commande) par défaut

    Tout ca pour quoi ? Pour gérer les droits sur les fichiers ! A l'aide d'un ls tapé dans une console vous pouvez lister un répertoire. A l'aide d'un ls -l cela liste le répertoire et ajoute les infos sur les droits de chaque sous répertoire et fichier. On obtient lignes de la forme :
    drwxr-xr-x    2 knoppix  knoppix      4096 Dec 10  2002 tmp
    Chaque colonne représente une info ; ici :
    drwxr-xr-x : représente les droits du répertoire "tmp" (en fin de ligne) Le propriétaire à donc tous les droits sur son répertoire (normal !) alors que les autres utilisateur (de son groupe et "n'importe qui") n'ont le droit que de lecture et d'exécution (pour un répertoire cela veux dire qu'il a le droit de lister son contenu)

    Les mots de passe sous Linux sont non réversible (utilisation du système "md5") : on ne peut pas décrypter un mot de passe cryté. Pour vérifier la validité d'un mot de passe, on demande une saisie clavier, on le crypte, et on compare le résultat au résultat crypté du mot de passe. Si c'est la même chose, c'est bon ; sinon t'es bon pour réessayer.
    Cela dit un bon mot de passe contiendra différent type de caractères pour ne pas être "deviner" facilement (par exemple "god" ou "love" ca le fait pas :/). L'utilisateur malinou mélangera des caractères miniscules, majuscules et spéciaux dans un mot de passe de 8 caractères minimum (8 c'est bien).
    Par exemple : "BebeRt3!" c'est bien mieux que "god" ;p.
    Il faut aussi signaler que c'est conseiller de ne pas utiliser 2x le même mot de passe car s'il est grillé, vous pouvez vous faire ouner de partout.
    Lorsqu'un programme est lancé par un utilisateur, il possède un identifiant unique (PID), un nom et un propriétaire. Il peut avoir plusieurs états :

    Le shell



    Le shell correspond à l'invite de commande de Windows, mais en infiniment plus puissant puisqu'on peut tout faire avec. Il est important de noter que Linux est "case sensitive" c'est à dire qu'il différentie les majuscules des minuscules. Donc faites attention, "Ls" ne correspondra pas a la commance "ls" vue précédemment.

    Les commandes principales (les plus souvent utilisées) :



    NB : la combinaison des touches ctrl+c (^c) vous permet de reprendre la main à n'importe quel moment dans la console.

    Voici maintenant quelques "tuyaux" (très) utiles pour manipuler la console :


    Les caractères de controles :



    Les éditeurs de texte

    vi

    vi est un éditeur de texte non graphique très léger, mais difficile à utiliser. Cependant, une fois une fois son fonctionnement compris, il est très puissant.
    vi popo.txt

    Si le fichier n'existe pas il ouvre un fichier vide par défaut.

    Son fonctionnement est le suivant : il existe 2 modes. Le mode commande et le mode édition. Le mode commande permet de faire des recherches, de sauver, quitter, etc.. alors que le mode édition permet de saisir du texte.

    Lorsque vous lancer vi, il est en mode commande. Appuyez sur i pour passer en mode édition, tapez du texte, appuyez sur esc (echap) pour revenir en mode commande, puis tapez :wq pour sauveguarder et quitter.

    Le mode édition :

    Les commandes de recherche :

    Le mode commande (il faut précéder les commandes d'un : :

    emacs

    C'est loin d'être un éditeur de texte léger mais c'est l'un des plus puissant. Il existe 2 modes sous emacs : les modes majeurs qui défini l'environnementde travail (on ne peut en charger qu'un à la fois) et les modes mineurs (on peut en charger plusieurs).

    les autres

    Il existe une version améliorée de vi nommée vim, et une version graphique nommée gvim.

    Une version graphique de emacs existe aussi : elle s'appelle xemacs

    Les navigateurs

    mozilla

    opera

    Lynx

    C'est un navigateur très léger en mode console. Les options :

    Installer un logiciel

    La pluspart des distributions proposent des outils pour installer automatiquement les programmes pré-compilés (rpm, dpkg, ..). Cependant tous les logiciels ne sont pas disponibles pour votre distribution sous ces formats spécifiques à chaque distribution ; aussi en téléchargeant les archives au format .tar.gz

    Après avoir téléchargé l'archive, vous devez la décompresser :

    tar zxvf larchive-1.4.24.tar.gz
    puis allez dans le répertoire créé (cd larchive-1.4.24), et tapez les commandes suivantes (notez que consulter le README du programme n'est pas une mauvaise chose) :
    ./configure
    make
    make install
    C'est l'étape de configuration, compilation et installation du programme grâce au comilateur gcc qui est le compilateur GNU de référence.

    L'interface graphique

    Sous Linux, l'interface graphique se présente sous la forme d'une architecture client/serveur, ce qui permet à plusieurs machines de se connecter à un serveur. On utilise couramment Xfree86 qui est un serveur graphique, sous lequel tourne le gestionnaire de fenêtre ou window manager (tels Fluxbox, Blackbox, WindowMaker, Enlightment) ou un environnement de travail (un gestionnaire de fenêtre intégrant une suite d'applications en plus) tels Gnome ou KDE

    On peut configurer Xfree directement par le fichier de config /etc/X11/XF86Config ou /etc/X11/XF86Config, ou grâce au programme de config /usr/X11/bin/xf86cfg ou /usr/X11R6/xf86cfg.
    Le fichier de configuration client est, lui, situé ici : /etc/X11/xinit/xinitrc ou ici : ~/.xinitrc (c'est un fichier caché)

    Sécuriser Linux

    Sécurité physique

    La première chose à faire est de vérifier l'accès à sa machine (c'est pas pour rien que les salles contenant les serveurs sont toujours fermées à clé ;))

    Vous devriez aussi mettre un mot de passe d'accès au BIOS, ce qui se règle dans celui-ci (au boot de la machine, il faut en général appuyer sur del pour rentrer dedans). Dans certains BIOS vous pouvez spécifier à l'ordinateur de demander ce mot de passe à chaque boot de la machine.
    Attention de ne pas oublier le mot de passe ; car alors la seule façon de démarrer la machine serait de reseter le BIOS (sur la carte mère : bouger un jumper de place ou enlever quelques temps la pile), une opération que n'importe qui ayant un accès physique au PC peut faire (d'ou l'intérêt du premier conseil ci-dessus)

    LILO

    Le premier programme qui est chargé par la machine c'est celui situé sur le MBR (Master Boot Record), qui a pour fonction de charger le système d'exploitation. Sous Linux il en existe 2 principaux : LILO et Grub (en général LILO est installé par défaut).
    Celui-ci vous permet des "modes sans echec" c'est à dire de booter sans rien charger, et vous pouvez même obtenir un shell en root sans connaitre le mdp de celui-ci ! Pour celà, il suffit d'avoir LILO en mode texte avec invite (laissez appuyer "shift" au démarrage) ce qui donne cela à l'écran :

    LILO boot: 
    Vous devez alors saisir un OS à lancer, et dans le cas de Linux vous pouvez spécifier plusieurs modes de lancement : Pour empêcher le passage de paramètres à LILO sans donner de mdp, éditer le fichier de conf de LILO :
    su
    (tapez le mdp root ici)
    vi /etc/lilo.conf
    puis ajoutez les lignes suivante après la ligne timeout 200 :
    password="mon_password"
    restricted
    Sauveguardez et quittez ("echap" puis :wq) puis mettez à jour la configuration de lilo en tapant lilo dans le shell, toujours en root.
    Enfin, de manière à ce que personne ne puisse lire le fichier (et donc lire votre mdp), changez les droits du fichier en tapant :
    chmod 600 /etc/lilo.conf

    Le fichier /etc/inittab

    C'est ce fichier qui permet de configurer le lancement des services et fonctionnalités au démarrage du système.

    En général les sytèmes récents basés sur Linux démarrent avec le niveau d'exécution 5, avec une invite de login X, après avoir lancé automatiquement l'inteerface graphique. Cela peut poser des problèmes de sécurité ; aussi il est conseillé de démarrer en niveau 3 càd en mode console, puis de taper startx après vous être loggé.
    Editez donc le fichier /etc/inittab en root, puis modifiez le "5" en "3" à cette ligne :

    # Default runlevel.
    id:5:initdefault:

    On peut aussi désactiver la combinaison de touches ctrl+alt+suppr, commentez la ligne contenant ctrlaltdel en ajoutant une "#" devant :

    ca:12345:ctrlaltdel:/sbin/shutdown -t1 -a -r now

    Le fichier /etc/securetty

    Ce fichier énumère les tty sur lesquels le login root peut arriver. Il est conseillé de ne laisser que quelques entrée vc et de commenter toutes les autres :

    #tty1
    #tty2
    #tty3
    #tty4
    #tty5
    #tty6
    vc/1
    vc/2

    Ainsi toutes les tentatives de connexion sur les tty seront rejetées.

    Le système et les utilisateurs

    Arrer les services inutiles au démarrage

    Allez dans le répertoire /etc/rc.d/ qui contient les liens symboliques vers les services qui se lancent au démarrage, pour chaque niveau d'exécution. Par exemple les liens vers les services qui se lancent au niveau d'exécution 3 se trouve dans rc3.d/. Il suffit d'enlever un lien pour que le service ne se lance pas au démarrage. Je vous conseille de les déplacer dans un dossier temporaire plutôt que de les supprimer, de façon à ne pas les perdre au cas ou vous vouliez les remettre au démarrage.

    Utiliser shadow

    Ici ,rien à voir avec "The rasmus" ; le système shadow permet de ne permettre la lecture les mots de passe encryptés qu'au root.

    Concrètement, le fichier /etc/password est cencé contenir tous les logins des users avec leur shell respectifs, etc.. et leur password encryté (voir plus haut). Il doit être lisible par tous pour pouvoir exécuter un "ls -l" par exemple. Le système shadow permet de mettre les mots de passe encryptés dans le fichier /etc/shadow qui lui, n'est lisible que par le root. Ainsi il n'est pas possible de faire une attaque au dictionnaire en récupérant les passes encryptés des utilisateurs du système.

    Vérifiez l'existence du fichier cat /etc/shadow : s'il est présent c'est que tout va bien ; sinon, vous pouvez installer le package qui devrait, logiquement, se trouver sur le CD de votre distribution.

    Politique de gestion des mots de passe utilisateurs

    Cracker un mot de passe, c'est possible mais il faut du temps. A supposer que quelqu'un ait réussi à choper le mot de passe d'un utilisateur de votre système, il va mettre du temps à tenter de la cracker. L'astuce consiste donc à forcer les utilisateurs à changer de mot de passe régulièrement pour rendre plus dur le travail aux crackers.

    On utilise pour cela la commande chage qui permet au système de demander la saisie d'un nouveau mot de passe tous les x unités de temps. Un exemple :

    chage -m 0 -M 60 -d 0 -I 0 -E 0 -W 3 brotha

    Cette commande oblige l'utilisateur brotha à changer de mot de passe à sa prochaine connexion, puis tous les 60 jours, et sera averti de l'expiration de son mot de passe 3 jours avant la date d'expiration.

    Sécuriser l'accès réseau

    La pluspart des attaques viennent de là ; il est donc vital de se pencher sur la sécurité réseau de votre machine.

    Le démon internet inetd

    NB : certaines distributions comme les mandrake 9.x et sup. n'utilisent plus inet mais plutôt xinet

    Sous Linux la plupart des services réseau sont associés à un démon spécifique qui à pour mission de prendre en charge les requêtes de connexion distante (par exemple Telnet utilise in.telnetd, FTP utilise in.ftpd,..).

    Vous pouvez désactiver certains service en commentant leur ligne associée dans le fichier de configuration /etc/inetd.conf
    Pour prendre en compte les modifications sans rebooter la machine, tapez killall -HUP inetd

    Modifier les ports des services

    Cela ce fait très simplement en modifiant le fichier /etc/services qui doit ressembler à ça (en plus grand !) :

    ftp             21/tcp
    ftp             21/udp
    ssh             22/tcp
    ssh             22/udp
    telnet          23/tcp
    telnet          23/udp
    smtp            25/tcp
    Gardez à l'esprit qu'un numéro de port doit être inférieur à 65535, et que les 1024 premiers sont plus ou mois réservés/déjà utilisé.

    TCP wrapper

    TCP wrapper est un demon qui va filtrer les services qui demandent l'accès à une connexion distante. Ces derniers demandent l'accès et TCP wrapper va les autoriser ou non, suivant les règles des fichiers /etc/hosts.allow et /etc/hosts.deny. Si vous ne souhaitez fournir aucun serice à une machine disante, éditez /etc/hosts.deny et mettez-y :

    ALL : ALL
    et commentant le reste ainsi que le contenu du fichier /etc/hosts.allow.

    Attention ,les règles contenues dans le fichier "hosts.allow" sont prioritaires sur celles de "hosts.deny".

    Le firewalling avec ipchains/iptables

    ipchains (avec le noyau 2.2) et maintenant iptables (depuis le noyau 2.4) permettent de créer des règles de filtrage de paquets (firewalling).
    Pour l'instant, je vous conseille d'installer le package GuardDog qui mettra à jour iptables selon vos règles.



    Après cette scéance de configuration des ports, vous pouvez vérifier les ports qui restent ouverts avec la commande
    nmap -p 1-65535 localhost
    [..] to be continued..